﻿
using Microsoft.Data.Edm.Expressions;
using System;
namespace Microsoft.Data.Edm
{
    /// <summary>
    /// Represents an EDM function import.
    /// </summary>
    public interface IEdmFunctionImport : IEdmFunctionBase, IEdmEntityContainerElement, IEdmNamedElement, IEdmVocabularyAnnotatable, IEdmElement
    {
        /// <summary>
        /// Gets a value indicating whether this function import has side-effects.
        /// <see cref="P:Microsoft.Data.Edm.IEdmFunctionImport.IsSideEffecting" /> cannot be set to true if <see cref="P:Microsoft.Data.Edm.IEdmFunctionImport.IsComposable" /> is set to true.
        /// </summary>
        bool IsSideEffecting
        {
            get;
        }
        /// <summary>
        /// Gets a value indicating whether this functon import can be composed inside expressions.
        /// <see cref="P:Microsoft.Data.Edm.IEdmFunctionImport.IsComposable" /> cannot be set to true if <see cref="P:Microsoft.Data.Edm.IEdmFunctionImport.IsSideEffecting" /> is set to true.
        /// </summary>
        bool IsComposable
        {
            get;
        }
        /// <summary>
        /// Gets a value indicating whether this function import can be used as an extension method for the type of the first parameter of this function import.
        /// </summary>
        bool IsBindable
        {
            get;
        }
        /// <summary>
        /// Gets the entity set containing entities returned by this function import.
        /// </summary>
        IEdmExpression EntitySet
        {
            get;
        }
    }
}